///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/*
 *	OPCODE - Optimized Collision Detection
 *	Copyright (C) 2001 Pierre Terdiman
 *	Homepage: http://www.codercorner.com/Opcode.htm
 */
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/**
 *	Main file for Opcode.dll.
 *	\file		Opcode.h
 *	\author		Pierre Terdiman
 *	\date		March, 20, 2001
 */
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Include Guard
#ifndef __OPCODE_H__
#define __OPCODE_H__

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Things to help us compile on non-windows platforms

#if defined(__APPLE__) || defined(__MACOSX__)
#if __APPLE_CC__ < 1495
#define sqrtf sqrt
#define sinf sin
#define cosf cos
#define acosf acos
#define asinf sinf
#endif
#endif

#ifndef _MSC_VER

#ifndef __MINGW32__
#define __int64 long long int
#define __stdcall /* */
#endif

#endif

// Turn deprecation warnings off when using VC8
#if (_MSC_VER >= 1400)
#pragma warning (disable : 4996)
#ifndef _CRT_SECURE_NO_DEPRECATE
#define _CRT_SECURE_NO_DEPRECATE 1
#endif
#ifndef _CRT_NONSTDC_NO_DEPRECATE
#define _CRT_NONSTDC_NO_DEPRECATE 1
#endif
#endif //VC8

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//// Compilation messages
//#ifdef _MSC_VER
//	#if defined(OPCODE_EXPORTS)
//		 //#pragma message("Compiling OPCODE")
//	#elif !defined(OPCODE_EXPORTS)
//		 //#pragma message("Using OPCODE")
//		///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//		// Automatic linking
//		#ifndef BAN_OPCODE_AUTOLINK
//			#ifdef _DEBUG
//				#pragma comment(lib, "Opcode_d.lib")
//			#else
//				#pragma comment(lib, "Opcode.lib")
//			#endif
//		#endif
//	#endif
//#endif
//
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//// Preprocessor
//#ifdef _MSC_VER
//	#ifndef ICE_NO_DLL
//		#ifdef OPCODE_EXPORTS
//			#define __declspec(dllexport)
//		#else
//			#define __declspec(dllimport)
//		#endif
//	#else
//		#define OPCODE_API
//	#endif
//#else
//	#define OPCODE_API
//#endif

	#include "Opcode/OPC_IceHook.h"

	namespace Opcode
	{
		// Bulk-of-the-work
		#include "Opcode/OPC_Settings.h"
		#include "Opcode/OPC_Common.h"
		#include "Opcode/OPC_MeshInterface.h"
		// Builders
		#include "Opcode/OPC_TreeBuilders.h"
		// Trees
		#include "Opcode/OPC_AABBTree.h"
		#include "Opcode/OPC_OptimizedTree.h"
		// Models
		#include "Opcode/OPC_BaseModel.h"
		#include "Opcode/OPC_Model.h"
		#include "Opcode/OPC_HybridModel.h"
		// Colliders
		#include "Opcode/OPC_Collider.h"
		#include "Opcode/OPC_VolumeCollider.h"
		#include "Opcode/OPC_TreeCollider.h"
		#include "Opcode/OPC_RayCollider.h"
		#include "Opcode/OPC_SphereCollider.h"
		#include "Opcode/OPC_OBBCollider.h"
		#include "Opcode/OPC_AABBCollider.h"
		#include "Opcode/OPC_LSSCollider.h"
		#include "Opcode/OPC_PlanesCollider.h"
		// Usages
		#include "Opcode/OPC_Picking.h"
		// Sweep-and-prune
		#include "Opcode/OPC_BoxPruning.h"
		#include "Opcode/OPC_SweepAndPrune.h"

		FUNCTION bool InitOpcode();
		FUNCTION bool CloseOpcode();
	}

#endif // __OPCODE_H__
